package com.winsdom.entity.customer;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 统一响应结果封装
 * 用于API接口返回的标准格式数据
 *
 * @param <T> 响应数据的类型
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "ResponseResult", description = "统一响应结果")
public class ResponseResult<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "响应状态码", example = "200", required = true,
            notes = "200表示成功，500表示错误，其他状态码根据业务需求定义")
    private Integer code;

    @ApiModelProperty(value = "响应消息", example = "操作成功", required = true,
            notes = "用于描述操作结果的文本信息")
    private String message;

    @ApiModelProperty(value = "响应数据", required = false,
            notes = "成功响应时携带的具体业务数据，错误响应时通常为null")
    private T data;

    /**
     * 构建成功响应结果
     *
     * @param data 响应数据
     * @param <T>  响应数据类型
     * @return 成功响应结果实例
     */
    public static <T> ResponseResult<T> success(T data) {
        return new ResponseResult<>(200, "操作成功", data);
    }

    /**
     * 构建错误响应结果
     *
     * @param message 错误消息
     * @param <T>     响应数据类型
     * @return 错误响应结果实例
     */
    public static <T> ResponseResult<T> error(String message) {
        return new ResponseResult<>(500, message, null);
    }
}